home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / COMAL / Z-Misc Series / (k)zb.d64 / bit'map'print.l < prev    next >
Text File  |  2007-03-01  |  6KB  |  152 lines

  1. 9000 // LIST 9000-9750,"@0:BIT'MAP'PRINT.L"
  2. 9005 //              ╘.┬.╚.╦UIPER 1984
  3. 9010 // DUMPS THE HIGH RESOLUTION BIT MAP TO THE LINE PRINTER;
  4. 9015 // LABELS ARE ADDED TO THE AXES WHEN PRINTED;
  5. 9020 // CONFIGURED FOR A ╟EMINI 10 PRINTER WITH A ├ARDCO INTERFACE
  6. 9025 //
  7. 9030 // EXAMPLE OF USE:
  8. 9035 //      DIM XLABEL$ OF 40, YLABEL$ OF 30
  9. 9040 //      READ'HIDDEN'RAM'SETUP
  10. 9045 //      *** YOUR CODE HERE ***
  11. 9050 //      XLABEL$:="LOG(2,2/1,1 ╥ATIO)"
  12. 9055 //      YLABEL$:="╦INETIC ╘EMPERATURE (╦)"
  13. 9060 //      BIT'MAP'PRINT(XLABEL$,YLABEL$)
  14. 9065 //      END
  15. 9070 //
  16. 9075 PROC BIT'MAP'PRINT(REF XLABEL$,REF YLABEL$) CLOSED
  17. 9080 BIT'MAP:=57344
  18. 9085 LC'CHAR'ROM:=55296
  19. 9090 NUM'DOTS:=500 //                NUMBER OF DOTS PER LINE FROM LEFT MARGIN
  20. 9095 NUM'DOTS'HI:=INT(NUM'DOTS/256)
  21. 9100 NUM'DOTS'LO:=NUM'DOTS-256*NUM'DOTS'HI
  22. 9105 DIM OUT$ OF NUM'DOTS
  23. 9110 OUT$(1:40):=""
  24. 9115 XLABEL$(1:40):=OUT$(1:20-INT(LEN(XLABEL$)/2))+XLABEL$
  25. 9120 YLABEL$(1:30):=OUT$(1:15-INT(LEN(YLABEL$)/2))+YLABEL$
  26. 9125 // PRINT THE Y-AXIS LABEL:
  27. 9130 OPEN FILE 255,"",UNIT 4,7,READ // CARDCO I/F IN UPPER/LOWER CASE MODE
  28. 9135 PRINT FILE 255: CHR$(12)+CHR$(27)+"┬"+CHR$(1), // FORMFEED; PITCH 12 CPI
  29. 9140 SKIP'LINES(20) //               CENTER PLOT ON PAGE
  30. 9145 // PRINT Y-AXIS LABEL IN DOUBLE-STRIKE, EMPHASIZED MODE
  31. 9150 PRINT FILE 255: CHR$(27)+"╟"+CHR$(9)+CHR$(27)+"┼"+YLABEL$,
  32. 9155 PRINT FILE 255: CHR$(27)+"╚"+CHR$(27)+"╞"+CHR$(10)
  33. 9160 CLOSE FILE 255
  34. 9165 // SET UP PRINTER FOR GRAPHICS:
  35. 9170 OPEN FILE 255,"",UNIT 4,5,READ // CARDCO I/F IN BIT MAP MODE
  36. 9175 PRINT FILE 255: CHR$(27)+CHR$(64), // RESET PRINTER
  37. 9180 PRINT FILE 255: CHR$(27)+CHR$(49), // LINE FEED TO 7/72 INCH
  38. 9185 FOR COLUMN:=0 TO 39 DO
  39. 9190 OUT$:="" // CLEAR PREVIOUS LINE FROM OUTPUT STRING
  40. 9195 FOR I:=1 TO NUM'DOTS-418 DO // PUT IN LEADING BLANKS...
  41. 9200 OUT$:=OUT$+CHR$(0) //          ...TO MOVE THE BIT-MAP...
  42. 9205 ENDFOR I //                    ...IMAGE OFF THE PAPER MARGIN
  43. 9210 CHAR'ADDR:=LC'CHAR'ROM+8*SCREEN'CODE(XLABEL$(COLUMN+1))
  44. 9215 GET'BYTES(CHAR'ADDR,OUT$) //    PRINT THE APPROPRIATE X-LABEL CHARACTER
  45. 9220 OUT$:=OUT$+CHR$(0)+CHR$(0) //   SOME SPACE BETWEEN LABEL AND X-AXIS
  46. 9225 PRINT FILE 255: CHR$(27)+"L"+CHR$(NUM'DOTS'LO)+CHR$(NUM'DOTS'HI),
  47. 9230 FOR ROW:=24 TO 0 STEP -1 DO // PUT ALL THE 'CHARACTERS' FROM THE ...
  48. 9235 CHAR'ADDR:=BIT'MAP+8*(COLUMN+40*ROW) // ...CURRENT COLUMN INTO THE ...
  49. 9240 GET'BYTES(CHAR'ADDR,OUT$) // ... OUTPUT STRING
  50. 9245 ENDFOR ROW
  51. 9250 PRINT FILE 255: OUT$ // PRINT THE COLUMN
  52. 9255 ENDFOR COLUMN
  53. 9260 OUT$:=""
  54. 9265 PRINT FILE 255: OUT$
  55. 9270 PRINT FILE 255: CHR$(27)+CHR$(64) // RESET PRINTER
  56. 9275 SKIP'LINES(20) //                    MOVE TO NEXT PAGE
  57. 9280 PRINT FILE 255: CHR$(27)+CHR$(64) // RESET PRINTER
  58. 9285 CLOSE FILE 255
  59. 9290 ENDPROC BIT'MAP'PRINT
  60. 9295 //
  61. 9300 PROC SKIP'LINES(N) CLOSED
  62. 9305 FOR I:=1 TO N DO
  63. 9310 PRINT FILE 255: CHR$(10),
  64. 9315 ENDFOR I
  65. 9320 ENDPROC SKIP'LINES
  66. 9325 //
  67. 9330 PROC READ'HIDDEN'RAM'SETUP 
  68. 9335 //       TO READ HIDDEN RAM:
  69. 9340 //       SET UP MACHINE CODE BY CALLING THIS PROCEDURE,
  70. 9345 //       POKE ADDRESS TO READ INTO 842 (LOW BYTE) AND 843 (HIGH BYTE),
  71. 9350 //       SYS 829, AND
  72. 9355 //       PEEK CONTENTS FROM 855.
  73. 9360 //
  74. 9365 //   828        TEMPORARY STORAGE FOR MEMORY CONTROL REGISTER
  75. 9370 POKE 829,173 // LDA...             (SAVE...
  76. 9375 POKE 830,1 //      ...1 +          (...THE...
  77. 9380 POKE 831,0 //      ...0*256 (=1)   (...MEMORY...
  78. 9385 POKE 832,141 // STA...             (...CONTROL...
  79. 9390 POKE 833,60 //     ...60 +         (...SETTING
  80. 9395 POKE 834,3 //      ...3*256 (=828)
  81. 9400 POKE 835,120 // SEI                (DISABLE INTERRUPTS
  82. 9405 POKE 836,73 //  EOR...             (REVERSE...
  83. 9410 POKE 837,7 //      ...$7           (...THE...
  84. 9415 POKE 838,141 // STA...             (...MEMORY...
  85. 9420 POKE 839,1 //      ...             (...CONTROL...
  86. 9425 POKE 840,0 //      ...(=1)         (...SETTING
  87. 9430 POKE 841,173 // LDA...
  88. 9435 //   842           ...LOW BYTE OF ADDRESS TO READ
  89. 9440 //   843           ...HIGH BYTE OF ADDRESS TO READ
  90. 9445 POKE 844,141 // STA...             (FETCH...
  91. 9450 POKE 845,87 //     ...87 +         (...DESIGNATED...
  92. 9455 POKE 846,3 //      ...3*256 (=855) (..BYTE
  93. 9460 POKE 847,173 // LDA...             (RESTORE...
  94. 9465 POKE 848,60 //     ...             (...THE...
  95. 9470 POKE 849,3 //      ...(=828)       (...MEMORY...
  96. 9475 POKE 850,141 // STA...             (...CONTROL...
  97. 9480 POKE 851,1 //      ...             (...SETTING
  98. 9485 POKE 852,0 //      ...(=1)
  99. 9490 POKE 853,88 //  CLI                (ENABLE INTERRUPTS
  100. 9495 POKE 854,96 //  RTS
  101. 9500 //   855        CONTAINS RETRIEVED BYTE
  102. 9505 ENDPROC READ'HIDDEN'RAM'SETUP
  103. 9510 //
  104. 9515 PROC GET'BYTES(CHAR'ADDR,REF OUT$) CLOSED
  105. 9520 // GET THE EIGHT BYTES OF A 'CHARACTER' FROM CHARACTER ROM OR BIT MAP ...
  106. 9525 // ... AND APPEND TO 'OUT$'.
  107. 9530 FOR BYTE:=7 TO 0 STEP -1 DO
  108. 9535 BYTE'ADDR:=BYTE+CHAR'ADDR
  109. 9540 HIGH'BYTE#:=INT(BYTE'ADDR/256)
  110. 9545 LOW'BYTE#:=BYTE'ADDR-256*HIGH'BYTE#
  111. 9550 POKE 842,LOW'BYTE#
  112. 9555 POKE 843,HIGH'BYTE#
  113. 9560 SYS 829
  114. 9565 OUT$:=OUT$+CHR$(PEEK(855))+CHR$(PEEK(855))
  115. 9570 ENDFOR BYTE
  116. 9575 ENDPROC GET'BYTES
  117. 9580 //
  118. 9585 FUNC SCREEN'CODE(ASCII$) CLOSED // RETURN SCREEN CODE VALUE OF CHARACTER
  119. 9590 AS:=ORD(ASCII$)
  120. 9595 RETURN LAND(AS,128)/2+LAND(AS,63)
  121. 9600 ENDFUNC SCREEN'CODE
  122. 9605 //
  123. 9610 FUNC LOGICAL'SET'UP(NUM,MASK,OP) CLOSED
  124. 9615 //
  125. 9620 // SET UP MACHINE CODE TO RESIDE
  126. 9625 // BETWEEN THE SCREEN AND THE
  127. 9630 // SPRITE POINTERS.
  128. 9635 //
  129. 9640 POKE 2024,169
  130. 9645 POKE 2025,NUM
  131. 9650 POKE 2026,OP
  132. 9655 POKE 2027,MASK
  133. 9660 POKE 2028,141
  134. 9665 POKE 2029,240
  135. 9670 POKE 2030,7
  136. 9675 POKE 2031,96
  137. 9680 SYS 2024
  138. 9685 RETURN PEEK(2032)
  139. 9690 ENDFUNC LOGICAL'SET'UP
  140. 9695 //
  141. 9700 FUNC LAND(NUM,MASK) CLOSED
  142. 9705 RETURN LOGICAL'SET'UP(NUM,MASK,41)
  143. 9710 ENDFUNC LAND
  144. 9715 //
  145. 9720 FUNC LOR(NUM,MASK) CLOSED
  146. 9725 RETURN LOGICAL'SET'UP(NUM,MASK,9)
  147. 9730 ENDFUNC LOR
  148. 9735 //
  149. 9740 FUNC XOR(NUM,MASK) CLOSED
  150. 9745 RETURN LOGICAL'SET'UP(NUM,MASK,73)
  151. 9750 ENDFUNC XOR
  152.